package 面试代码;

import java.io.*;

/**
 * @author zx
 * @create 2023-02-18 14:42
 * 编写一个程序：分别使用字节流和字符流拷贝一个文本文件
 * 提示：
 * 1）使用FileInputStream、FileOutputStream和FileReader、FileWriter分别进行拷贝
 * 2）使用字节流拷贝时,定义一个1024长度的字节数组作为缓冲区
 *    使用字符流拷贝时,使用BufferedReader和BufferedWriter包装流进行包装
 */
public class Java文件拷贝 {
    public static void main(String[] args) throws IOException {
        // 字节流拷贝
        FileInputStream in = new FileInputStream("D:/H.txt");
        FileOutputStream out = new FileOutputStream("D:/A1.txt");
        byte[] buffer = new byte[1024];
        int len;
        while((len = in.read(buffer)) != -1) {
            out.write(buffer, 0, len);
        }
        in.close();
        out.close();
        /**
         read():
            作用：从输入流中读入一个字节数组
            return：读入缓冲区的字节总数,如果已经到达文件末尾,没有更多数据,则返回-1

         write()：
            作用：从指定的字节数组开始将len字节写入文件输入流
            write(byte b[], int off, int len)
            b[]：指定的字节数组   off：数据偏移量(不懂)  len：要写入的字节数
         */

        // 字符流拷贝
        BufferedReader bf = new BufferedReader(new FileReader("D:/H.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:/A2.txt"));
        String str;
        while((str = bf.readLine()) != null) {
            bw.write(str);
            bw.newLine();
        }
        bf.close();
        bw.close();

        /**
         readLine()：
            作用：阅读一行文本。换行('/n')视为改行的终止
            return：一个包含行内容的字符串(不包含终止字符),如果到达流的末尾则返回null
         write()：写入字符串
         newLine()：写入行分隔符
         */
    }
}
